//#ifndef MAC_OS
#include "stdafx.h"
//#endif
#include "CMenu.h"
#include "CMenuItem.h"
#include "CGame.h"

CMenu::CMenu()
{
	//iX = iY = 0;
	//iW = iH = 0;
	//iBgColor = 0;	
	//iItemGap = 0;

	bVisible = false;
	for(int i=0; i<k_Menu_Max_Items; i++)
		pItems[i] = NULL;
	iNumItem = 0;
	iSelItem = -1;	
}

CMenu::~CMenu()
{
	CleanMenu();
}

void CMenu::SetVisible(bool visible)
{
	bVisible = visible;
}

void CMenu::AddItem(CMenuItem *item)
{
	pItems[iNumItem++] = item;
}

CMenuItem* CMenu::SetItem(CMenuItem *item, int id, bool del)
{
	if(del)
		SAFE_DEL(pItems[id]);
	pItems[id] = item;
	return item;
}

void CMenu::RemoveItem(int id, bool del)
{
	if(del)
		SAFE_DEL(pItems[id]);
	for(int i=id + 1; i<iNumItem; i++)
		pItems[i - 1] = pItems[i];
	iNumItem--;
}

void CMenu::CleanMenu(bool del)
{
	if(del)
		for(int i=0; i<iNumItem; i++)
			SAFE_DEL(pItems[i]);
	iNumItem = 0;
	iSelItem = -1;
}

void CMenu::SetEnableItem(int id, bool enable)
{
	pItems[id]->SetEnable(enable);
}

INT16 CMenu::GetSelItemId()
{
	return iSelItem;
}

UINT8 CMenu::GetNumItem()
{
	return iNumItem;
}

CMenuItem* CMenu::GetItemById(UINT8 id)
{
	if(id < iNumItem)
		return pItems[id];
	return NULL;
}

CMenuItem* CMenu::GetItemByCmd(INT16 cmd)
{
	for(int i=0; i<iNumItem; i++)
		if(pItems[i]->GetCommand() == cmd)
			return pItems[i];
	return NULL;
}

CMenuItem* CMenu::GetSelItem()
{
	CMenuItem* pi = NULL;
	if(iSelItem >= 0 && iSelItem < iNumItem)
		pi = pItems[iSelItem];
	return pi;
}

INT16 CMenu::Update()
{
	INT16 cmd = k_Item_Command_None;
	if(bVisible)
	{
		for(int i=0; i<iNumItem && i!=iSelItem; i++)
			pItems[i]->Update();
		if(iSelItem >= 0)
			return pItems[iSelItem]->Update();
	}
	return cmd;
}

void CMenu::Draw(GLESLib *g)
{
	if(bVisible)
	{
		//g->SetColor(iBgColor);
		//g->FillRect(iX, iY, iW, iH, true);
		for(int i=0; i<iNumItem; i++)
			pItems[i]->Draw(g);
	}
}

//INT16 CMenu::HandleTouch(int tx, int ty)
//{
//	if(bVisible)
//	{
//		for(int i=0; i<iNumItem; i++)
//		{
//			if(pItems[i]->HandlePoiter(tx, ty))
//			{
//				iSelItem = i;
//				return iSelItem;
//			}
//		}
//	}
//	return -1;
//}

INT16 CMenu::HandleStartTouch(int tx, int ty)
{
	if(bVisible)
	{
		for(int i=0; i<iNumItem; i++)
		{
			if(pItems[i]->IsPointerHit(tx, ty))
			{
				iSelItem = i;
				pItems[i]->SetState(k_Item_Anim_Hover);
				return iSelItem;
			}
		}
	}
	return -1;
}

INT16 CMenu::HandleMoveTouch(int tx, int ty)
{
	if(bVisible)
	{
		if( iSelItem >=0 )
		{
			if( pItems[iSelItem]->IsPointerHit(tx, ty) )
			{
				return iSelItem;
			}
		}
	}
	return -1;
}

INT16 CMenu::HandleEndTouch(int tx, int ty)
{
	if(bVisible)
	{
		if( iSelItem >=0 )
		{
			if( pItems[iSelItem]->IsPointerHit(tx, ty) )
			{
				pItems[iSelItem]->SetState(k_Item_Anim_Select);
				return iSelItem;
			}
			else if(pItems[iSelItem]->IsEnable())
			{
				pItems[iSelItem]->SetState(k_Item_Anim_Normal);
			}
		}
	}	
	return -1;
}